import json

from django.db.models import Q
from django.shortcuts import render
from django.http import JsonResponse
from .models import User


# Create your views here.


def check_username(request):
    """检查并接收输入的用户名"""
    # data接收数据
    data = json.loads(request.body.decode('utf-8'))
    # 查找数据库中是否有对应的用户名
    obj_users = User.objects.filter(username=data['username'])
    # 进行校验
    try:
        if obj_users.count() == 0:  # 表示不存在这样的用户名
            return JsonResponse({'code': 1, 'exists': False})
        else:  # 表示不存在
            return JsonResponse({'code': 1, 'exists': True})

    except Exception as e:
        return JsonResponse({'code': 0, "msg": "校验用户名失败，具体原因：" + str(e)})


def add_user(request):
    """将校验数据输入数据库"""
    data = json.loads(request.body.decode("utf-8"))
    try:
        # 赋值
        obj_user = User(username=data['username'], email=data['email'], password=data['password'])
        obj_user.save()
        # 增加之后在表单显示
        # 使用orm获取所有用户信息，并把对象转化为字典
        obj_users = User.objects.all().values()
        users = list(obj_users)
        return JsonResponse({'code': 1, 'data': users})
    except Exception as e:
        return JsonResponse({'code': 0, 'msg': '注册出现异常，具体异常如下：' + str(e)})


def check_password(request):
    """密码是否正确"""
    data = json.loads(request.body.decode('utf-8'))
    try:
        # 查找该用户名
        obj_users = User.objects.filter(username=data['lname'])  # data中 的值的变量应该与前端定义的变量名相同
        # 如果用户名存在
        if obj_users.count() != 0:
            # 当前端输入的密码（data['password']）与后端数据库中的password相同时
            object_user = User.objects.filter(password=data['lpassword'], username=data['lname'])
            # 存在密码相同
            if object_user.count() != 0:
                return JsonResponse({'code': 1, 'exists': True, })  # 只要code为1则用户存在，
            else:  # 不存在密码相同
                return JsonResponse({'code': 1, 'exists': False, })  # 密码错误
        else:  # 用户名不存在
            return JsonResponse({'code': 2, 'exists': False})  # 用户不存在
    except Exception as e:
        return JsonResponse({'code': 0, 'msg': '登录出现异常，具体错误如下：' + str(e)})


def update_password(request):
    """将校验数据输入数据库"""
    data = json.loads(request.body.decode("utf-8"))
    try:
        # 找到要修改的用户
        obj_user = User.objects.get(username=data['n_username'])
        obj_user.password = data['npassword']
        obj_user.save()
        # 增加之后在表单显示
        # 使用orm获取所有用户信息，并把对象转化为字典
        obj_users = User.objects.all().values()
        users = list(obj_users)
        return JsonResponse({'code': 1, 'data': users})
    except Exception as e:
        return JsonResponse({'code': 0, 'msg': '修改密码出现异常，具体异常如下：' + str(e)})


"提出数据库的邮箱"


def find_email(request):
    """前端对接存在问题"""
    data = json.loads(request.body.decode("utf-8"))
    try:
        obj_users = User.objects.filter(username=data['username']).values('email')  # data中 的值的变量应该与前端定义的变量名相同

        email = list(obj_users)
        return JsonResponse({'code': 1, 'email': email})  # 只要code为1则用户存在，

    except Exception as e:
        return JsonResponse({'code': 0, 'msg': '登录出现异常，具体错误如下：' + str(e)})


